package com.sunny.springboot2.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流
 * @author sunny
 * @date 2018/11/28
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Limit {

    /**
     * 资源名称
     *
     * @author sunny
     * @date 2018/11/28
     * @return java.lang.String
     */
    String name() default "";

    /**
     * 资源key
     *
     * @author sunny
     * @date 2018/11/28
     * @return java.lang.String
     */
    String key() default "";

    /**
     * Key的prefix
     *
     * @author sunny
     * @date 2018/11/28
     * @return java.lang.String
     */
    String prefix() default "";

    /**
     * 给定的时间段
     * 单位秒
     *
     * @author sunny
     * @date 2018/11/28
     * @return int
     */
    int period();

    /**
     * 最多的访问限制次数
     *
     * @author sunny
     * @date 2018/11/28
     * @return int
     */
    int count();

    /**
     * 类型
     *
     * @author sunny
     * @date 2018/11/28
     * @return com.sunny.springboot2.core.annotation.LimitType
     */
    LimitType limitType() default LimitType.CUSTOMER;


    enum LimitType {
        /**
         * 自定义key
         */
        CUSTOMER,
        /**
         * 根据请求者IP
         */
        IP;
    }
}
